﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace SMSTester
{
    /// <summary>
    /// Класс для временного изменения курсора на часики для всего приложения. (Лейбов Е.)
    /// <example>
    ///    using (new CursorWait())
    ///    {
    ///        document.Save(document.FilePath);
    ///    }
    /// </example>
    /// </summary>
    public class CursorWait : IDisposable
    {
        public CursorWait()
        {
            _useWaitCursor = Application.UseWaitCursor;

            // Если свойство UseWaitCursor уже выставлено в true, ничего не трогаем
            if (!_useWaitCursor)
            {
                Application.UseWaitCursor = true;
                Cursor.Current = Cursors.WaitCursor;
            }
        }

        public void Dispose()
        {
            // Восстанавливаем, если нужно
            if (!_useWaitCursor)
                Application.UseWaitCursor = false;

            GC.SuppressFinalize(this);
        }

        private bool _useWaitCursor;

#if DEBUG
        ~CursorWait()
        {
            Debug.Assert(false, "You forgot to dispose AppWaitCursor");
        }
#endif
    }
    ////  /// <summary>
////  /// Класс для временного изменения курсора на часики для заданного окошка и всех его потомков.
////  /// <example>
////  ///    using (new CursorWait(this))
////  ///    {
////  ///        document.Save(document.FilePath);
////  ///    }
////  /// </example>
////  /// </summary>
////  public class CursorWait : IDisposable
////  {
////    public CursorWait(Control ctl)
////    {
////      _ctl = ctl; 
////      _useWaitCursor = ctl.UseWaitCursor;

////      // Если свойство UseWaitCursor уже выставлено в true, ничего не трогаем
////      if (!_useWaitCursor)
////      {
////        ctl.UseWaitCursor = true;
////        Cursor.Current = Cursors.WaitCursor;
////      }
////    }

////    public void Dispose()
////    {
////      // Восстанавливаем, если нужно
////      if (!_useWaitCursor)
////        _ctl.UseWaitCursor = false;

////      GC.SuppressFinalize(this);
////    }

////    private Control _ctl;
////    private bool _useWaitCursor;

////#if DEBUG
////    ~CursorWait()
////    {
////      Debug.Assert(false, "You forgot to dispose WaitCursor");
////    }
////#endif
////  }
}
